// 整体思路是将两个字符串较短的用 0 补齐，使得两个字符串的长度一致，然后从末尾进行遍历运算，得到
// 最终结果
// 本题解大致思路与上述一致，但由于字符串操作原因，不确定最后的结果会多出一位，所以会有两种处理方式
// 第一种：在进行计算时直接拼接字符串，会得到一个反向字串，需要最后再进行翻转
// 第二种：按照进位给结果字符串赋值，最后如果有进位，则在前方进行字符串拼接进位

var addBinary = function (a, b) {
  while (a.length > b.length) b = "0" + b;
  while (a.length < b.length) a = "0" + a; // 先对齐
  let res = new Array(a.length);
  let sum = 0;
  let carry = 0; // 进位
  for (let i = a.length - 1; i >= 0; i--) {
    sum = Number(a[i]) + Number(b[i]) + carry;
    if (sum >= 2) {
      res[i] = sum - 2;
      carry = 1;
    } else {
      res[i] = sum;
      carry = 0;
    }
  }
  if (carry) res.unshift(1); // 循环结束还要进1，则在res数组前端加一个1
  return res.join("");
};
